package cn.com.dcsgo.service;

import cn.com.dcsgo.domain.Order;
import cn.com.dcsgo.dto.*;
import cn.com.dcsgo.vo.OrderAmountVO;
import cn.com.dcsgo.vo.OrderConfirmVO;
import cn.com.dcsgo.vo.OrderSubmitVO;
import cn.com.dcsgo.vo.OrderVO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * 针对表【order(订单表)】的数据库操作Service
 *
 * @author Dcsgo
 * @since 2025-11-16 13:32:37
 */
public interface OrderService extends IService<Order> {

    /**
     * 获取订单数量信息
     *
     * @param openid 会员ID
     * @return 订单数量信息
     */
    OrderAmountVO getOrderAmountVO(String openid);

    /**
     * 分页获取订单信息
     *
     * @param openid  会员ID
     * @param status  订单类型（0全部、1待支付、2待发货、3待收货、5已完成）
     * @param pageDTO 分页参数
     * @return 订单信息分页数据
     */
    Page<OrderVO> getOrderVOPage(String openid, Integer status, PageDTO pageDTO);

    /**
     * 分页获取订单数据
     *
     * @param pageDTO       分页参数
     * @param orderQueryDTO 查询参数
     * @return 分页订单数据
     */
    Page<Order> getOrderPage(PageDTO pageDTO, OrderQueryDTO orderQueryDTO);

    /**
     * 获取订单数据
     *
     * @param orderNumber 订单编号
     * @return 订单数据
     */
    Order getByOrderNumber(String orderNumber);

    /**
     * 确认订单
     *
     * @param orderConfirmDTO 订单信息
     * @return 确认订单响应参数
     */
    OrderConfirmVO confirmOrder(OrderConfirmDTO orderConfirmDTO);

    /**
     * 提交订单
     *
     * @param orderSubmitDTO 订单信息
     * @return 提交订单响应参数
     */
    OrderSubmitVO submitOrder(OrderSubmitDTO orderSubmitDTO);

    /**
     * 回滚订单
     * @param order 订单信息
     * @param stockUpdateDTO 库存信息
     * @return true回滚成功，false回滚失败
     */
    boolean rollBackOrder(Order order, StockUpdateDTO stockUpdateDTO);
}
